const express = require('express');
const bodyParser = require('body-parser');
const sqlite3 = require('sqlite3').verbose();

const app = express();
const port = 3000;

// 中间件
app.use(bodyParser.json());
// app.use(bodyParser.urlencoded({ extended: true }));

// 添加JSON解析错误处理中间件
app.use((err, req, res, next) => {
  if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
    return res.status(400).json({
      code: "1",
      msg: "参数错误"
    });
  }
  next();
});

// 数据库连接
const db = new sqlite3.Database('./signup.db', (err) => {
  if (err) {
    console.error('Error opening database', err.message);
  } else {
    console.log('Connected to the SQLite database.');
  }
});

// 报名接口
app.post('/api/sign-up', (req, res) => {
  // 先检查req.body是否存在
  if (!req.body) {
    return res.status(400).json({
      code: "1",
      msg: "参数错误"
    });
  }

  const { stuName, stuClass, stuId } = req.body;

  // 检查必要参数
  if (!stuName || !stuClass || !stuId) {
    return res.status(400).json({
      code: "1",
      msg: "参数错误"
    });
  }

  // 插入数据到数据库
  const sql = `INSERT INTO signups (stuName, stuClass, stuId) VALUES (?, ?, ?)`;
  db.run(sql, [stuName, stuClass, stuId], function (err) {
    if (err) {
      console.error('Error inserting data', err.message);
      return res.status(500).json({
        code: "2",
        msg: "数据库错误"
      });
    }

    // 成功响应
    res.json({
      code: "0",
      msg: "报名成功"
    });
  });
});

// 启动服务器
app.listen(port, () => {
  console.log(`Server running on http://localhost:${port}`);
});

// 关闭数据库连接当进程退出
process.on('SIGINT', () => {
  db.close((err) => {
    if (err) {
      console.error('Error closing database', err.message);
    } else {
      console.log('Database connection closed.');
    }
    process.exit(0);
  });
});